package cn.cangfei.massage.service;

import cn.cangfei.massage.dto.param.MassageInfoParam;
import cn.cangfei.massage.dto.param.MassageOutpatientRelationParam;
import cn.cangfei.massage.dto.param.MassageSpecialRelationParam;
import cn.cangfei.massage.dto.update.MassageInfoUpdate;
import cn.cangfei.massage.entity.MassageInfo;

import java.util.List;
import java.util.Optional;

/**
 * @author Lemon  2313812755@qq.com
 * @date 2023/2/3
 */

public interface IMassageInfoService {

    /**
     * 添加推拿馆信息
     *
     * @param param 推拿馆信息参数
     * @return 是否成功
     */
    boolean insert(MassageInfoParam param);

    /**
     * 更新推拿馆信息
     *
     * @param id    推拿馆编号
     * @param param 推拿馆信息参数
     * @return 是否成功
     */
    boolean update(Long id, MassageInfoParam param);

    /**
     * 获取推拿馆信息
     *
     * @param id 推拿馆编号
     * @return 推拿馆信息
     */
    Optional<MassageInfo> getOptional(Long id);

    /**
     * 获取推拿馆名称
     *
     * @param id 推拿馆编号
     * @return 推拿馆名称，否则返回未知
     */
    String getName(Long id);

    /**
     * 删除推拿馆信息
     *
     * @param id 推拿馆编号
     * @return 是否成功
     */
    boolean delete(Long id);

    /**
     * 判断推拿馆信息是否存在
     *
     * @param id 推拿馆编号
     * @return 是否存在
     */
    boolean count(Long id);

    /**
     * 判断电话是否存在
     *
     * @param phone 电话
     * @return 是否存在
     */
    boolean count(String phone);

    /**
     * 查找推拿馆列表
     *
     * @param name     推拿馆名称
     * @param pageNum  第几页
     * @param pageSize 页大小
     * @return 推拿馆列表
     */
    List<MassageInfo> list(String name, Integer pageNum, Integer pageSize);

    /**
     * 插入专科到推拿馆中去
     *
     * @param param 推拿馆专科关系参数
     * @return 是否成功
     */
    boolean insertSpecialRelation(MassageSpecialRelationParam param);

    /**
     * 插入门诊到推拿馆中去
     *
     * @param param 推拿馆门诊关系参数
     * @return 是否成功
     */
    boolean insertOutpatientRelation(MassageOutpatientRelationParam param);

    /**
     * 删除从推拿馆中移除门诊
     *
     * @param massageId   推拿馆编号
     * @param outpatientId 门诊编号
     * @return 是否成功
     */
    boolean deleteOutpatientRelation(Long massageId, Long outpatientId);

    /**
     * 删除从推拿馆中移除专科
     *
     * @param massageId 推拿馆编号
     * @param specialId  专科编号
     * @return 是否成功
     */
    boolean deleteSpecialRelation(Long massageId, Long specialId);

    /**
     * 判断关系是否存在
     *
     * @param id 关系编号
     * @return 是否存在
     */
    boolean countSpecialRelation(Long id);

    /**
     * 判断关系是否存在
     *
     * @param id 关系编号
     * @return 是否存在
     */
    boolean countOutpatientRelation(Long id);

    /**
     * 判断推拿馆是否存在该专科
     *
     * @param param 推拿馆专科关系参数
     * @return 是否存在
     */
    boolean countSpecialRelation(MassageSpecialRelationParam param);

    /**
     * 判断推拿馆是否存在该门诊
     *
     * @param param 推拿馆门诊关系参数
     * @return 是否存在
     */
    boolean countOutpatientRelation(MassageOutpatientRelationParam param);

    /**
     * 根据推拿馆id获取推拿馆信息
     *
     * @param massageId
     * @return
     */
    MassageInfoUpdate getMassageById(Long massageId);
}
